package com.dayu.structure.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态代理:在运行时动态生成，编译完成后没有实际的class文件，
 * 而是在运行的时候动态的生成类字节码，并加载到JVM中
 */
public class JDKProxy {

    private Object target;
    public JDKProxy(Object target) {
        this.target = target;
    }

    /**
     * 为目标对象生成代理对象
     * @return
     */
    public Object getProxyInstance(){
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("start...");

                        Object invoke = method.invoke(target, args);

                        System.out.println("commit...");

                        return null;
                    }
                });
    }

}
